/**
 * 流转状态与任务关联配置
 * 定义不同项目状态需要创建的任务列表
 */

const TaskModel = require('../config/models_config').task_model;
const ResearchStateBiz = require('../helpers/research_state_biz.js');

// 项目状态任务配置
const FLOW_TASK_CONFIG = {
    // 待立项状态（PROJECT_STATUS.PENDING = 0）
    0: [
        {
            title: '准备项目申请材料',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '准备项目立项所需的申请材料，包括项目概述、目标、预算等',
            assignRole: 'PROJECT_MANAGER', // 分配给项目经理
            estimatedHours: 8
        }
    ],
    
    // 立项审核状态（PROJECT_STATUS.REVIEWING = 1）
    1: [
        {
            title: '立项材料审核',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '审核项目立项申请材料',
            assignRole: 'MANAGER', // 分配给管理层
            estimatedHours: 4
        }
    ],
    
    // 硬件确认状态（PROJECT_STATUS.ACTIVE_HARDWARE_CONFIRM = 10）
    10: [
        {
            title: '硬件方案确认',
            type: TaskModel.TYPE.DESIGN,
            priority: TaskModel.PRIORITY.HIGH,
            description: '确认项目硬件方案与要求',
            assignRole: 'HARDWARE_ENGINEER', // 分配给硬件工程师
            estimatedHours: 16
        },
        {
            title: '硬件物料清单初步确认',
            type: TaskModel.TYPE.DESIGN,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '确认硬件物料清单初步方案',
            assignRole: 'HARDWARE_ENGINEER', // 分配给硬件工程师
            estimatedHours: 8
        }
    ],
    
    // 硬件设计打样状态（PROJECT_STATUS.ACTIVE_HARDWARE_DESIGN = 11）
    11: [
        {
            title: '原理图设计',
            type: TaskModel.TYPE.DESIGN,
            priority: TaskModel.PRIORITY.HIGH,
            description: '完成项目原理图设计',
            assignRole: 'HARDWARE_ENGINEER', // 分配给硬件工程师
            estimatedHours: 24
        },
        {
            title: 'PCB设计',
            type: TaskModel.TYPE.DESIGN,
            priority: TaskModel.PRIORITY.HIGH,
            description: '完成PCB设计与布局',
            assignRole: 'HARDWARE_ENGINEER', // 分配给硬件工程师
            estimatedHours: 32
        },
        {
            title: 'BOM清单定稿',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '完成BOM物料清单定稿',
            assignRole: 'HARDWARE_ENGINEER', // 分配给硬件工程师
            estimatedHours: 8
        },
        {
            title: '打样采购申请',
            type: TaskModel.TYPE.INTEGRATION,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '提交硬件打样采购申请',
            assignRole: 'PURCHASE', // 分配给采购
            estimatedHours: 4
        }
    ],
    
    // 软硬件调试状态（PROJECT_STATUS.ACTIVE_SW_HW_DEBUG = 12）
    12: [
        {
            title: '软件开发',
            type: TaskModel.TYPE.DEVELOPMENT,
            priority: TaskModel.PRIORITY.HIGH,
            description: '完成软件功能开发',
            assignRole: 'SOFTWARE_ENGINEER', // 分配给软件工程师
            estimatedHours: 40
        },
        {
            title: '硬件调试',
            type: TaskModel.TYPE.TESTING,
            priority: TaskModel.PRIORITY.HIGH,
            description: '硬件功能调试',
            assignRole: 'HARDWARE_ENGINEER', // 分配给硬件工程师
            estimatedHours: 16
        },
        {
            title: '软硬件联调',
            type: TaskModel.TYPE.INTEGRATION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '软硬件联合调试',
            assignRole: 'INTEGRATION_TEAM', // 分配给集成团队
            estimatedHours: 24
        }
    ],
    
    // 测试验证状态（PROJECT_STATUS.ACTIVE_TESTING = 13）
    13: [
        {
            title: '功能测试',
            type: TaskModel.TYPE.TESTING,
            priority: TaskModel.PRIORITY.HIGH,
            description: '完成产品功能测试',
            assignRole: 'TEST_ENGINEER', // 分配给测试工程师
            estimatedHours: 16
        },
        {
            title: '性能测试',
            type: TaskModel.TYPE.TESTING,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '完成产品性能测试',
            assignRole: 'TEST_ENGINEER', // 分配给测试工程师
            estimatedHours: 16
        },
        {
            title: '测试报告编写',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '编写测试报告',
            assignRole: 'TEST_ENGINEER', // 分配给测试工程师
            estimatedHours: 8
        }
    ],
    
    // 客户确认状态（PROJECT_STATUS.ACTIVE_CUSTOMER_CONFIRM = 14）
    14: [
        {
            title: '客户样品准备',
            type: TaskModel.TYPE.INTEGRATION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '准备用于客户确认的样品',
            assignRole: 'SAMPLE_TEAM', // 分配给样品组
            estimatedHours: 8
        },
        {
            title: '客户演示准备',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '准备客户演示材料',
            assignRole: 'BUSINESS_TEAM', // 分配给业务组
            estimatedHours: 8
        },
        {
            title: '客户确认跟进',
            type: TaskModel.TYPE.INTEGRATION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '跟进客户确认进度并收集反馈',
            assignRole: 'BUSINESS_TEAM', // 分配给业务组
            estimatedHours: 4
        }
    ],
    
    // 订单准备状态（PROJECT_STATUS.ACTIVE_ORDER_PREPARATION = 15）
    15: [
        {
            title: '生产资料准备',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '准备生产所需的技术资料',
            assignRole: 'HARDWARE_ENGINEER', // 分配给硬件工程师
            estimatedHours: 8
        },
        {
            title: '生产BOM确认',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '确认生产用BOM清单',
            assignRole: 'PRODUCTION_TEAM', // 分配给生产团队
            estimatedHours: 4
        },
        {
            title: '量产文档审核',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '审核量产所需文档',
            assignRole: 'DOCUMENT_CONTROL', // 分配给文控
            estimatedHours: 8
        }
    ],
    
    // 生产状态（PROJECT_STATUS.ACTIVE_PRODUCTION = 16）
    16: [
        {
            title: '生产工艺确认',
            type: TaskModel.TYPE.PRODUCTION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '确认产品生产工艺',
            assignRole: 'PRODUCTION_ENGINEER', // 分配给生产工程师
            estimatedHours: 8
        },
        {
            title: '生产进度跟踪',
            type: TaskModel.TYPE.PRODUCTION,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '跟踪产品生产进度',
            assignRole: 'PRODUCTION_MANAGER', // 分配给生产经理
            estimatedHours: 4
        },
        {
            title: '生产问题协调',
            type: TaskModel.TYPE.PRODUCTION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '协调处理生产中出现的问题',
            assignRole: 'PROJECT_MANAGER', // 分配给项目经理
            estimatedHours: 8
        }
    ],
    
    // 产品待客户反馈状态（PROJECT_STATUS.ACTIVE_PRODUCT_FEEDBACK = 17）
    17: [
        {
            title: '客户反馈收集',
            type: TaskModel.TYPE.DOCUMENTATION,
            priority: TaskModel.PRIORITY.HIGH,
            description: '收集客户对产品的反馈意见',
            assignRole: 'BUSINESS_TEAM', // 分配给业务组
            estimatedHours: 8
        },
        {
            title: '反馈问题分析',
            type: TaskModel.TYPE.ANALYSIS,
            priority: TaskModel.PRIORITY.HIGH,
            description: '分析客户反馈的问题',
            assignRole: 'PROJECT_MANAGER', // 分配给项目经理
            estimatedHours: 8
        },
        {
            title: '改进方案制定',
            type: TaskModel.TYPE.DESIGN,
            priority: TaskModel.PRIORITY.MEDIUM,
            description: '根据反馈制定产品改进方案',
            assignRole: 'RESEARCH_TEAM', // 分配给研发团队
            estimatedHours: 16
        }
    ]
};

// 检查任务完成情况的配置，定义哪些任务完成后可以触发状态流转
const TASK_COMPLETION_CONFIG = {
    // 从硬件确认状态（10）到硬件设计状态（11）的流转所需完成的任务
    '10_11': {
        requiredTasks: ['硬件方案确认', '硬件物料清单初步确认'],
        allRequired: true, // 是否所有任务都必须完成
        nextStatus: 11, // 下一个状态
        nextActiveStatus: 0 // 下一个活动状态
    },
    
    // 从硬件设计状态（11）到软硬件调试状态（12）的流转所需完成的任务
    '11_12': {
        requiredTasks: ['原理图设计', 'PCB设计', 'BOM清单定稿'],
        allRequired: true,
        nextStatus: 12,
        nextActiveStatus: 0
    },
    
    // 从软硬件调试状态（12）到测试验证状态（13）的流转所需完成的任务
    '12_13': {
        requiredTasks: ['软件开发', '硬件调试', '软硬件联调'],
        allRequired: true,
        nextStatus: 13,
        nextActiveStatus: 0
    },
    
    // 从测试验证状态（13）到客户确认状态（14）的流转所需完成的任务
    '13_14': {
        requiredTasks: ['功能测试', '性能测试', '测试报告编写'],
        allRequired: true,
        nextStatus: 14,
        nextActiveStatus: 0
    }
};

// 根据角色获取用户ID的函数配置
const ROLE_USER_MAP = {
    // 此处应填充实际的角色用户映射
    // 例如：PROJECT_MANAGER: 'user123'
    // 实际项目中应当通过API查询获取
};

module.exports = {
    FLOW_TASK_CONFIG,
    TASK_COMPLETION_CONFIG,
    ROLE_USER_MAP
}; 